home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / thesource-7.lha / Source / DefFunc.lha / DefFunc / defunc.3 next >
Text File  |  1993-12-14  |  5KB  |  199 lines

  1.  
  2.  
  3.  
  4. DEFUNC(3)              C LIBRARY FUNCTIONS              DEFUNC(3)
  5.  
  6.  
  7.  
  8. NAME
  9.      _d_e_f_u_n_c -- a portable C library package for runtime  function
  10.      constructing.
  11.  
  12. DESCRIPTION
  13.      _d_e_f_u_n_c (Dynamic  Expressible  Function  Constructing)  is  a
  14.      portable  C  library package for constructing functions from
  15.      runtime inputted expressions.
  16.  
  17.      _d_e_f_u_n_c  library  function  _d_f_o_p_e_n()  accepts  an  expression
  18.      string and, on success, returns a function pointer. e.g.
  19.  
  20.           #include <defunc.h>
  21.  
  22.           foo()
  23.           {
  24.               double (*fnctptr)();
  25.                 ....
  26.               fnctptr = dfopen("(x*x+y*y)^0.5");
  27.                 ....
  28.           };
  29.  
  30.      The function dfopen()  is  reenterable.  That  is,  you  can
  31.      repeatedly  call dfopen() without worry about the new result
  32.      may overlap or damage the old one, as  long  as  you  assign
  33.      them to different lvalues. e.g.
  34.  
  35.           double (*fnctptr1)();
  36.           double (*fnctptr2)();
  37.            ...
  38.           fnctptr1 = dfopen("exp(-x*x)");
  39.           fnctptr2 = dfopen("exp(-x)*sin(x)");
  40.            ...
  41.  
  42.      Then, fnctptr1 and fnctptr2  will  point  to  two  different
  43.      functions.
  44.  
  45.      Function dfopen() parses the expression be passed  based  on
  46.      tokens  it  recognized. Except for numerical string constant
  47.      tokens(i.e. anonymous constant tokens) and 8 build in tokens
  48.      "+",  "-",  "*", "/", "^", "(", ")", "," plus a pseudo token
  49.      "=", all other tokens are external tokens.  External  tokens
  50.      include  argument tokens, function tokens and named constant
  51.      tokens. They are stored in a global token table. They can be
  52.      set/reset  or  Added/deleted  statically  as well as dynami-
  53.      cally. e.g.
  54.  
  55.           nameargu("re", "im");
  56.  
  57.      This will reset argument tokens to "re" and "im"(the default
  58.      are "x" and "y").
  59.  
  60.  
  61.  
  62.  
  63. defunc 1.2           Last change: Dec. 1993                     1
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. DEFUNC(3)              C LIBRARY FUNCTIONS              DEFUNC(3)
  71.  
  72.  
  73.  
  74.           namefnct("log", log);
  75.           namefnct("ln" , log);
  76.  
  77.      Here, the external function log()  has  been  added  to  the
  78.      token list with 2 alias names "log" and "ln".
  79.  
  80.           namecnst("pi", 2.0*asin(1.0));
  81.           namecnst("PI", 2.0*asin(1.0));
  82.  
  83.      This will add a named constant token to the list with  alias
  84.      names "pi" and "PI" and value 3.1415926... .
  85.  
  86.           clrcnst("PI");
  87.  
  88.      This will delete the constant token  "PI"  from  the  global
  89.      token  table.  After an external token has been put into the
  90.      global token list, it can be used in expressions  passed  to
  91.      _d_f_o_p_e_n().  e.g. After you put the exponential function exp()
  92.      into token table with
  93.  
  94.           namefnct("exp", exp);
  95.             /* add exp() to token table statically */
  96.  
  97.      Than you can use it to construct a gaussian function dynami-
  98.      cally as
  99.  
  100.           double (*gauss)();
  101.            ...
  102.           gauss = dfopen("exp(-x*x)");
  103.  
  104.      Argument tokens, named constant tokens and dynamically  con-
  105.      structed  functions  can be reset or added to the token list
  106.      dynamically. This can be done directly from  the  expression
  107.      passed to _d_f_o_p_e_n() function. e.g.
  108.  
  109.           fnctptr = dfopen("Rho(re, im)=(re*re+im*im)^0.5");
  110.  
  111.      This will reset the argument tokens to "re" and "im", return
  112.      a  duplex  function pointer and add this function pointer to
  113.      the global token list with name "Rho".
  114.  
  115.           dfopen("gauss(x)=exp(-x*x)");
  116.  
  117.      This sets the first argument tokens to "x" and  2nd  one  to
  118.      none and put the return function pointer to the global token
  119.      table with name "gauss" while the return function pointer is
  120.      not assigned to any lvalue. Now, the token "gauss" is recog-
  121.      nizable by _d_e_f_u_n_c and you can in turn use  it  to  construct
  122.      new function. Such as
  123.  
  124.           dfopen("gauss2d(x,y)=gauss(x)*gauss(y)");
  125.  
  126.  
  127.  
  128.  
  129. defunc 1.2           Last change: Dec. 1993                     2
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. DEFUNC(3)              C LIBRARY FUNCTIONS              DEFUNC(3)
  137.  
  138.  
  139.  
  140.      will return a 2 dimension gaussian function and  put  it  to
  141.      token  table  with  name "gauss2d". If you don't want this 2
  142.      dimension gaussian function be putted into the  token  table
  143.      but you still want reset the argument tokens, for example to
  144.      "a", "b", you can use
  145.  
  146.           fnctptr = dfopen("(a, b) = gauss(a)*gauss(b)");
  147.  
  148.      or
  149.  
  150.           fnctprt = dfopen("gauss(a, b) = gauss(a)*gauss(b)");
  151.  
  152.      Here, fnctptr is a function pointer to accept  the  returned
  153.      value from _d_f_o_p_e_n().
  154.  
  155.      Named constant tokens can also be added to  the  token  list
  156.      from expression passed to _d_f_o_p_e_n(). e.g.
  157.  
  158.           fnctptr = dfopen("pi = 4*atan2(1,1)");
  159.  
  160.      This will return a constant function and add  a  named  con-
  161.      stant  token  to  the token list with value 3.1415926... and
  162.      name "pi".
  163.  
  164. SEE ALSO
  165.      dfopen(3)
  166.  
  167. AUTHOR
  168.      Ke Jin
  169.      Physics Department
  170.      Queen's University
  171.      Kingston, Ontario
  172.      Canada K7L 3N6
  173.      jinke@sparky.phy.queensu.ca
  174.  
  175. BUGS
  176.      Report bugs of _d_e_f_u_n_c library to the author by email.
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195. defunc 1.2           Last change: Dec. 1993                     3
  196.  
  197.  
  198.  
  199.